package com.scau.hwadee.examination.mapper;

import com.scau.hwadee.examination.entity.UserInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * @author YHX
 * @date 2019/7/29  9:07
 * @description
 */
public interface UserInfoMapper {

    /**
     * 根据用户名或邮箱或者电话和密码去查找用户信息
     *
     * @param userName
     * @param userEmail
     * @param userTelephone
     * @param userPassword
     * @return
     */
    UserInfo getUser(
            @Param("userName") String userName,
            @Param("userEmail") String userEmail,
            @Param("userTelephone") String userTelephone,
            @Param("userPassword") String userPassword);

    /**
     * 根据用户的信息(用户名，邮箱和电话)去查找用户
     *
     * @param userMessage
     * @return
     */
    UserInfo getUserWithoutPassword(
            @Param("userMessage") String userMessage);

    /**
     * 根据用户邮箱去查找用户
     *
     * @param userEmail
     * @return
     */
    UserInfo getUserByUserEmail(@Param("userEmail") String userEmail);

    /**
     * 根据用户名去查找用户是否存在
     *
     * @param userName
     * @return
     */
    int getUserCountByUserName(@Param("userName") String userName);

    /**
     * 根据用户的邮箱去查找用户是否存在
     *
     * @param userEmail
     * @return
     */
    int getUserCountByUserEmail(@Param("userEmail") String userEmail);

    /**
     * 根据用户的电话去查找用户是否存在
     *
     * @param userTelephone
     * @return
     */
    int getUserCountByUserTelephone(@Param("userTelephone") String userTelephone);

    /**
     * 增加用户
     *
     * @param userInfo
     * @return
     */
    int addUser(UserInfo userInfo);

    /**
     * 根据用户主键去获取用户
     *
     * @param userpk
     * @return
     */
    UserInfo getUserByPrimaryKey(@Param("userPK") String userpk);

    /**
     * 根据用户主键去更新用户
     *
     * @param userInfo
     * @return
     */
    int updateUserByPrimaryKey(UserInfo userInfo);

    /**
     * 根据用户主键去删除用户
     *
     * @param userInfo
     * @return
     */
    int deleteUser(UserInfo userInfo);

    /**
     * 获取所有管理员的信息列表
     *
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<UserInfo> getAllAdmins(@Param("pageNum") int pageNum,
                                @Param("pageSize") int pageSize);
}
